home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SPACE 1
/
SPACE - Library 1 - Volume 1.iso
/
program
/
441
/
dlibs12
/
getln.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-11-23
|
793b
|
47 lines
#define KEY_UNDO 0x1B /* escape */
#define KEY_CR 0x0D
#define KEY_LF 0x0A
#define KEY_BS 0x08
#define KEY_DEL 0x7F
char *getln(ip, get, put, buffer, limit)
char *ip;
register int (*get)();
register int (*put)();
char *buffer;
register int limit;
{
register char *bp = buffer;
register int c, i = 0;
for(;;)
{
c = (*get)(ip) & 0xFF;
if(c == KEY_UNDO)
{
*(bp = buffer) = '\0';
i = 0;
break;
}
else if((c == KEY_CR) || (c == KEY_LF))
{
*bp = '\0';
break;
}
else if(((c == KEY_BS) || (c == KEY_DEL)) && (bp != buffer))
{
--bp;
(*put)('\b');
(*put)(' ');
(*put)('\b');
--i;
}
else if((c >= ' ') && (i < limit))
{
(*put)(*bp++ = c);
++i;
}
}
return(buffer);
}